home *** CD-ROM | disk | FTP | other *** search
/ BCI NET 2 / BCI NET 2.iso / archives / programming / source / term43-source.lha / Extras / Source / gtlayout-Source.lha / LTP_LayoutGadgets.c < prev    next >
Encoding:
C/C++ Source or Header  |  1995-01-25  |  18.6 KB  |  671 lines

  1. /*  GadTools layout toolkit
  2. **
  3. **  Copyright © 1993-1994 by Olaf `Olsen' Barthel
  4. **  Freely distributable.
  5. */
  6.  
  7. #include "gtlayout_global.h"
  8.  
  9. VOID __regargs
  10. LTP_LayoutGadgets(LayoutHandle *Handle,ObjectNode *Group)
  11. {
  12.     if(!Handle -> Failed)
  13.     {
  14.         STATIC struct TagItem NoUnderscoreVanillaTags[] =
  15.         {
  16.             {TAG_DONE}
  17.         };
  18.  
  19.         STATIC struct TagItem VanillaTags[] =
  20.         {
  21.             {GT_Underscore, '_'},
  22.             {TAG_DONE}
  23.         };
  24.  
  25.         STATIC struct TagItem DisabledTags[] =
  26.         {
  27.             {GT_Underscore, '_' },
  28.             {GA_Disabled,    TRUE},
  29.             {TAG_DONE}
  30.         };
  31.  
  32.         STATIC struct TagItem NoUnderscoreDisabledTags[] =
  33.         {
  34.             {GA_Disabled,    TRUE},
  35.             {TAG_DONE}
  36.         };
  37.  
  38.         struct NewGadget     NewGadget;
  39.  
  40.         struct Gadget        *Gadget,
  41.                     *Extra;
  42.         struct TagItem        *Tags;
  43.         ULONG             page;
  44.         ObjectNode        *Node;
  45.  
  46.         if(!Handle -> List)
  47.         {
  48.             if(!(Handle -> Previous = CreateContext(&Handle -> List)))
  49.             {
  50.                 Handle -> Failed = TRUE;
  51.  
  52.                 return;
  53.             }
  54.         }
  55.  
  56.         NewGadget . ng_TextAttr   = Handle -> TextAttr;
  57.         NewGadget . ng_VisualInfo = Handle -> VisualInfo;
  58.  
  59.         Group -> Special . Group . Visible = TRUE;
  60.  
  61.         SCANPAGE(Group,Node,page)
  62.         {
  63.             if(Node -> Type != FRAME_KIND && Node -> Type != BOX_KIND && Node -> Type != XBAR_KIND && Node -> Type != YBAR_KIND)
  64.             {
  65.                 Extra = NULL;
  66.  
  67.                 if(Node -> GroupIndent)
  68.                 {
  69.                     NewGadget . ng_LeftEdge = Node -> Left + 4;
  70.                     NewGadget . ng_TopEdge    = Node -> Top + 2;
  71.                     NewGadget . ng_Width    = Node -> Width - (4 + 4);
  72.                     NewGadget . ng_Height    = Node -> Height - (2 + 2);
  73.                 }
  74.                 else
  75.                 {
  76.                     NewGadget . ng_LeftEdge = Node -> Left;
  77.                     NewGadget . ng_TopEdge    = Node -> Top;
  78.                     NewGadget . ng_Width    = Node -> Width;
  79.                     NewGadget . ng_Height    = Node -> Height;
  80.                 }
  81.  
  82.                 NewGadget . ng_GadgetText    = Node -> Label ? Node -> Label : (STRPTR)"";
  83.                 NewGadget . ng_GadgetID     = Node -> ID;
  84.                 NewGadget . ng_UserData     = Node;
  85.  
  86.                 if(Node -> NoKey)
  87.                 {
  88.                     if(Node -> Disabled)
  89.                     {
  90.                         if(!V39 && (Node -> Type == MX_KIND || Node -> Type == LISTVIEW_KIND))
  91.                             Tags = NoUnderscoreVanillaTags;
  92.                         else
  93.                             Tags = NoUnderscoreDisabledTags;
  94.                     }
  95.                     else
  96.                         Tags = NoUnderscoreVanillaTags;
  97.                 }
  98.                 else
  99.                 {
  100.                     if(Node -> Disabled)
  101.                     {
  102.                         if(!V39 && (Node -> Type == MX_KIND || Node -> Type == LISTVIEW_KIND))
  103.                             Tags = VanillaTags;
  104.                         else
  105.                             Tags = DisabledTags;
  106.                     }
  107.                     else
  108.                         Tags = VanillaTags;
  109.                 }
  110.  
  111.                 switch(Node -> LabelPlace)
  112.                 {
  113.                     case PLACE_LEFT:
  114.  
  115.                         NewGadget . ng_Flags = PLACETEXT_LEFT;
  116.                         break;
  117.  
  118.                     case PLACE_RIGHT:
  119.  
  120.                         NewGadget . ng_Flags = PLACETEXT_RIGHT;
  121.                         break;
  122.  
  123.                     case PLACE_ABOVE:
  124.  
  125.                         NewGadget . ng_Flags = PLACETEXT_ABOVE;
  126.                         break;
  127.  
  128.                     case PLACE_BELOW:
  129.  
  130.                         NewGadget . ng_Flags = PLACETEXT_BELOW;
  131.                         break;
  132.  
  133.                     case PLACE_IN:
  134.  
  135.                         NewGadget . ng_Flags = PLACETEXT_IN;
  136.                         break;
  137.  
  138.                     default:
  139.  
  140.                         NewGadget . ng_Flags = NULL;
  141.                         break;
  142.                 }
  143.  
  144.                 if(Node -> HighLabel)
  145.                     NewGadget . ng_Flags |= NG_HIGHLABEL;
  146.  
  147.                 switch(Node -> Type)
  148.                 {
  149. #ifdef DO_LEVEL_KIND
  150.                     case LEVEL_KIND:
  151.  
  152.                         if(Node -> Special . Level . LevelImage = NewObject(LTP_LevelClass,NULL,
  153.                             IA_Width,    Node -> Width,
  154.                             IA_Height,    Node -> Height,
  155.                             IA_Left,    0,
  156.                             IA_Top,     0,
  157.                             LVIA_DrawInfo,    Handle -> DrawInfo,
  158.                             LVIA_FontWidth, Handle -> GlyphWidth,
  159.                             LVIA_Max,    Node -> Special . Level . Max    - Node -> Special . Level . Plus,
  160.                             LVIA_Current,    Node -> Special . Level . Level - Node -> Special . Level . Plus,
  161.                         TAG_DONE))
  162.                         {
  163.                             NewGadget . ng_GadgetText    = "";
  164.                             NewGadget . ng_Flags        = NULL;
  165.  
  166.                             if(Gadget = CreateGadgetA(GENERIC_KIND,Handle -> Previous,&NewGadget,NULL))
  167.                             {
  168.                                 Gadget -> GadgetType    |= GTYP_CUSTOMGADGET;
  169.  
  170.                                 Gadget -> Flags     = GFLG_GADGIMAGE | GFLG_GADGHIMAGE;
  171.                                 Gadget -> Activation    = GACT_RELVERIFY | GACT_IMMEDIATE | GACT_FOLLOWMOUSE;
  172.                                 Gadget -> MutualExclude = (ULONG)&Node -> Special . Level . CustomHook;
  173.                                 Gadget -> GadgetRender    = Node -> Special . Level . LevelImage;
  174.                                 Gadget -> SelectRender    = Node -> Special . Level . LevelImage;
  175.                                 Gadget -> SpecialInfo    = &Node -> Special . Level;
  176.  
  177.                                 if(Node -> Disabled)
  178.                                     Gadget -> Flags |= GFLG_DISABLED;
  179.                             }
  180.                         }
  181.  
  182.                         break;
  183. #endif    /* DO_LEVEL_KIND */
  184.                     case BUTTON_KIND:
  185.  
  186.                         Gadget = CreateGadgetA(BUTTON_KIND,Handle -> Previous,&NewGadget,Tags);
  187.  
  188.                         break;
  189.  
  190.                     case GROUP_KIND:
  191.  
  192.                         LTP_LayoutGadgets(Handle,Node);
  193.  
  194.                         continue;
  195.  
  196.                     case CHECKBOX_KIND:
  197.  
  198.                         Gadget = CreateGadget(CHECKBOX_KIND,Handle -> Previous,&NewGadget,
  199.                             GTCB_Checked,    Node -> Current,
  200.                             GTCB_Scaled,    TRUE,
  201.                         TAG_MORE,Tags);
  202.  
  203.                         break;
  204.  
  205.                     case LISTVIEW_KIND:
  206.  
  207.                         if(!Node -> Special . List . ReadOnly && Node -> Special . List . LinkID != -1 && Node -> Special . List . LinkID != NIL_LINK)
  208.                             Gadget = Node -> Special . List . Link = LTP_FindGadget(Handle,Node -> Special . List . LinkID);
  209.                         else
  210.                             Gadget = NULL;
  211.  
  212.                         if((NewGadget . ng_Flags & PLACETEXT_ABOVE) && Node -> Label && Node -> Special . List . FlushLabelLeft)
  213.                             NewGadget . ng_GadgetText = "";
  214.  
  215.                         Gadget = CreateGadget(LISTVIEW_KIND,Handle -> Previous,&NewGadget,
  216.                             GTLV_Selected,        Node -> Current,
  217.                             GTLV_ReadOnly,        Node -> Special . List . ReadOnly,
  218.                             GTLV_ScrollWidth,    2 + 2 * Handle -> GlyphWidth + 2,
  219.  
  220.                             Node -> Current >= 0 ?            GTLV_Top:        TAG_IGNORE,Node -> Current,
  221.                             Node -> Current >= 0 ?            GTLV_MakeVisible:    TAG_IGNORE,Node -> Current,
  222.                             Node -> Special . List . Labels ?    GTLV_Labels:        TAG_IGNORE,Node -> Special . List . Labels,
  223.                             Node -> Special . List . LinkID != -1 ? GTLV_ShowSelected:    TAG_IGNORE,Gadget,
  224.                             Node -> Special . List . CallBack ?    GTLV_CallBack:        TAG_IGNORE,Node -> Special . List . CallBack,
  225.                             Node -> Special . List . MaxPen ?    GTLV_MaxPen:        TAG_IGNORE,Node -> Special . List . MaxPen,
  226.                         TAG_MORE,Tags);
  227.  
  228.                         break;
  229.  
  230.                     case MX_KIND:
  231.  
  232.                         NewGadget . ng_Height = Handle -> RPort . TxHeight;
  233.  
  234.                         Gadget = CreateGadget(MX_KIND,Handle -> Previous,&NewGadget,
  235.                             GTMX_Labels,    Node -> Special . Radio . Choices,
  236.                             GTMX_Active,    Node -> Current,
  237.                             GTMX_Spacing,    Handle -> InterHeight,
  238.                             GTMX_Scaled,    TRUE,
  239.  
  240.                             Node -> Label ? GTMX_TitlePlace : TAG_IGNORE,  Node -> Special . Radio . TitlePlace,
  241.                         TAG_MORE,Tags);
  242.  
  243.                         break;
  244.  
  245.                     case TEXT_KIND:
  246.  
  247.                         if(Node -> Special . Text . UsePicker)
  248.                             NewGadget . ng_Width -= (4 + (((6 * Handle -> GlyphWidth) / 4) & ~1) + 1 + 4);
  249.  
  250.                         if(Gadget = CreateGadget(TEXT_KIND,Handle -> Previous,&NewGadget,
  251.                             GTTX_Border,        Node -> Special . Text . Border,
  252.                             GTTX_Justification,    Node -> Special . Text . Justification,
  253.  
  254.                             Node -> Special . Text . Text ? GTTX_Text : TAG_IGNORE,Node -> Special . Text . Text,
  255.                         TAG_MORE,Tags))
  256.                         {
  257.                             if(Node -> Special . Text . UsePicker)
  258.                             {
  259.                                 Extra = LTP_CreatePicker(Handle,Node,Gadget,&NewGadget);
  260.  
  261.                                 if(!Extra)
  262.                                     Gadget = NULL;
  263.  
  264.                                 Node -> Special . Text . Picker = Extra;
  265.                             }
  266.                         }
  267.  
  268.                         break;
  269. #ifdef DO_GAUGE_KIND
  270.                     case GAUGE_KIND:
  271.  
  272.                         NewGadget . ng_Height -= Handle -> InterHeight + Handle -> RPort . TxHeight + 2;
  273.  
  274.                         Gadget = CreateGadgetA(TEXT_KIND,Handle -> Previous,&NewGadget,NULL);
  275.  
  276.                         break;
  277. #endif
  278.  
  279. #ifdef DO_TAPEDECK_KIND
  280.                     case TAPEDECK_KIND:
  281.  
  282.                         if(Node -> Special . TapeDeck . ButtonType >= TDBT_BACKWARD && Node -> Special . TapeDeck . ButtonType < TDBTLAST)
  283.                         {
  284.                             LONG    ImageType;
  285.                             UWORD    Activation,
  286.                                 Flags;
  287.  
  288.                             if(Node -> Special . TapeDeck . Toggle)
  289.                                 Activation = GACT_TOGGLESELECT | GACT_IMMEDIATE;
  290.                             else
  291.                                 Activation = GACT_RELVERIFY;
  292.  
  293.                             if(Node -> Current)
  294.                                 Flags = GFLG_GADGIMAGE | GFLG_GADGHIMAGE | GFLG_SELECTED;
  295.                             else
  296.                                 Flags = GFLG_GADGIMAGE | GFLG_GADGHIMAGE;
  297.  
  298.                             switch(Node -> Special . TapeDeck . ButtonType)
  299.                             {
  300.                                 case TDBT_BACKWARD:
  301.  
  302.                                     ImageType = IMAGECLASS_BACKWARD;
  303.                                     break;
  304.  
  305.                                 case TDBT_FORWARD:
  306.  
  307.                                     ImageType = IMAGECLASS_FORWARD;
  308.                                     break;
  309.  
  310.                                 case TDBT_PREVIOUS:
  311.  
  312.                                     ImageType = IMAGECLASS_PREVIOUS;
  313.                                     break;
  314.  
  315.                                 case TDBT_NEXT:
  316.  
  317.                                     ImageType = IMAGECLASS_NEXT;
  318.                                     break;
  319.  
  320.                                 case TDBT_RECORD:
  321.  
  322.                                     ImageType = IMAGECLASS_RECORD;
  323.                                     break;
  324.  
  325.                                 case TDBT_PLAY:
  326.  
  327.                                     ImageType = IMAGECLASS_PLAY;
  328.                                     break;
  329.  
  330.                                 case TDBT_STOP:
  331.  
  332.                                     ImageType = IMAGECLASS_STOP;
  333.                                     break;
  334.  
  335.                                 case TDBT_PAUSE:
  336.  
  337.                                     ImageType = IMAGECLASS_PAUSE;
  338.                                     break;
  339.  
  340.                                 case TDBT_REWIND:
  341.  
  342.                                     ImageType = IMAGECLASS_REWIND;
  343.                                     break;
  344.  
  345.                                 case TDBT_EJECT:
  346.  
  347.                                     ImageType = IMAGECLASS_EJECT;
  348.                                     break;
  349.                             }
  350.  
  351.                             if(Node -> Special . TapeDeck . ButtonImage = NewObject(LTP_ImageClass,NULL,
  352.                                 IIA_ImageType,    ImageType,
  353.                                 IIA_GlyphWidth, Node -> Special . TapeDeck . ButtonWidth,
  354.                                 IIA_GlyphHeight,Node -> Special . TapeDeck . ButtonHeight,
  355.                                 IA_Width,    NewGadget . ng_Width,
  356.                                 IA_Height,    NewGadget . ng_Height,
  357.                             TAG_DONE))
  358.                             {
  359.                                 NewGadget . ng_GadgetText    = "";
  360.                                 NewGadget . ng_Flags        = NULL;
  361.  
  362.                                 if(Gadget = CreateGadgetA(GENERIC_KIND,Handle -> Previous,&NewGadget,NULL))
  363.                                 {
  364.                                     Gadget -> GadgetType    |= GTYP_BOOLGADGET;
  365.                                     Gadget -> Flags     |= Flags;
  366.                                     Gadget -> Activation    |= Activation;
  367.  
  368.                                     Gadget -> GadgetRender     = Node -> Special . TapeDeck . ButtonImage;
  369.                                     Gadget -> SelectRender     = Node -> Special . TapeDeck . ButtonImage;
  370.  
  371.                                     if(Node -> Disabled)
  372.                                         Gadget -> Flags |= GFLG_DISABLED;
  373.                                 }
  374.                             }
  375.                         }
  376.  
  377.                         break;
  378. #endif    /* DO_TAPEDECK_KIND */
  379.                     case NUMBER_KIND:
  380.  
  381.                         Gadget = CreateGadget(NUMBER_KIND,Handle -> Previous,&NewGadget,
  382.                             GTNM_Number,        Node -> Special . Number . Number,
  383.                             GTNM_Border,        Node -> Special . Number . Border,
  384.                             GTNM_Justification,    Node -> Special . Number . Justification,
  385.                             GTNM_Border,        Node -> Special . Number . Border,
  386.                             GTNM_Justification,    Node -> Special . Number . Justification,
  387.                         TAG_MORE,Tags);
  388.  
  389.                         break;
  390.  
  391.                     case CYCLE_KIND:
  392.  
  393.                         Gadget = CreateGadget(CYCLE_KIND,Handle -> Previous,&NewGadget,
  394.                             GTCY_Labels,        Node -> Special . Cycle . Choices,
  395.                             GTCY_Active,        Node -> Current,
  396.                         TAG_MORE,Tags);
  397.  
  398.                         break;
  399.  
  400.                     case PALETTE_KIND:
  401.  
  402.                         Gadget = CreateGadget(PALETTE_KIND,Handle -> Previous,&NewGadget,
  403.                             GTPA_Depth,        Node -> Special . Palette . Depth,
  404.                             GTPA_Color,        Node -> Current,
  405.                             GTPA_ColorOffset,    Node -> Min,
  406.                             GTPA_IndicatorWidth,    MAX(10,Node -> Width / (Node -> Max - Node -> Min + 1)),
  407.                             GTPA_IndicatorHeight,    Node -> Height,
  408.  
  409.                             Node -> Special . Palette . ColourTable ? GTPA_ColorTable : TAG_IGNORE,Node -> Special . Palette . ColourTable,
  410.                         TAG_MORE,Tags);
  411.  
  412.                         break;
  413.  
  414.                     case SLIDER_KIND:
  415.  
  416.                         Gadget = CreateGadget(SLIDER_KIND,Handle -> Previous,&NewGadget,
  417.                             GTSL_Min,        Node -> Min,
  418.                             GTSL_Max,        Node -> Max,
  419.                             GTSL_Level,        Node -> Current,
  420.                             GTSL_MaxLevelLen,    Node -> Special . Slider . MaxLevelLen,
  421.                             GTSL_LevelPlace,    Node -> Special . Slider . LevelPlace,
  422.                             GTSL_LevelFormat,    Node -> Special . Slider . LevelFormat ? Node -> Special . Slider . LevelFormat : (STRPTR)"%ld",
  423.                             GA_RelVerify,        TRUE,
  424.  
  425.                             V40 ? GTSL_MaxPixelLen : TAG_IGNORE,    Node -> Special . Slider . LevelWidth,
  426.                             V40 ? GTSL_Justification : TAG_IGNORE,    GTJ_RIGHT,
  427.                             Node -> Special . Slider . DispFunc ? GTSL_DispFunc : TAG_IGNORE,Node -> Special . Slider . DispFunc,
  428.                         TAG_MORE,Tags);
  429.  
  430.                         break;
  431.  
  432.                     case SCROLLER_KIND:
  433.  
  434.                         Gadget = CreateGadget(SCROLLER_KIND,Handle -> Previous,&NewGadget,
  435.                             GA_RelVerify,    Node -> Special . Scroller . RelVerify,
  436.                             GA_Immediate,    Node -> Special . Scroller . Immediate,
  437.                             GTSC_Top,    Node -> Current,
  438.                             GTSC_Total,    Node -> Max,
  439.                             GTSC_Visible,    Node -> Special . Scroller . Visible,
  440.                             PGA_Freedom,    Node -> Special . Scroller . Vertical ? LORIENT_VERT : LORIENT_HORIZ,
  441.  
  442.                             Node -> Special . Scroller . Arrows ? GTSC_Arrows : TAG_IGNORE,Node -> Special . Scroller . ArrowSize,
  443.                         TAG_MORE,Tags);
  444.  
  445.                         break;
  446.  
  447.                     case STRING_KIND:
  448.  
  449.                         if(Node -> Special . String . LinkID != -1)
  450.                         {
  451.                             ObjectNode *ListView = LTP_FindNode(Handle -> TopGroup,Node -> Special . String . LinkID);
  452.  
  453.                             if(ListView)
  454.                             {
  455.                                 NewGadget . ng_LeftEdge = ListView -> Left;
  456.                                 NewGadget . ng_TopEdge    = ListView -> Top + ListView -> Height;
  457.                                 NewGadget . ng_Width    = ListView -> Width;
  458.                             }
  459.                         }
  460.  
  461.                         if(Node -> Special . String . UsePicker)
  462.                             NewGadget . ng_Width -= (4 + (((6 * Handle -> GlyphWidth) / 4) & ~1) + 1 + 4);
  463.  
  464.                         if(Gadget = CreateGadget(STRING_KIND,Handle -> Previous,&NewGadget,
  465.                             GTST_String,        Node -> Special . String . String,
  466.                             GTST_MaxChars,        Node -> Special . String . MaxChars,
  467.                             GTST_EditHook,        Node -> Special . String . EditHook ? Node -> Special . String . EditHook : Handle -> StandardEditHook,
  468.                             GA_Immediate,        TRUE,
  469.                             STRINGA_Justification,    Node -> Special . String . Justification,
  470.                             STRINGA_ExitHelp,    Handle -> HelpHook != NULL,
  471.                         TAG_MORE,Tags))
  472.                         {
  473.                             if(!V39)
  474.                                 Gadget -> Activation |= GACT_IMMEDIATE;
  475.  
  476.                             if(Node -> Special . String . UsePicker)
  477.                             {
  478.                                 Extra = LTP_CreatePicker(Handle,Node,Gadget,&NewGadget);
  479.  
  480.                                 if(!Extra)
  481.                                     Gadget = NULL;
  482.  
  483.                                 Node -> Special . String . Picker = Extra;
  484.                             }
  485.                         }
  486.  
  487.                         break;
  488. #ifdef DO_FRACTION_KIND
  489.                     case FRACTION_KIND:
  490.  
  491.                         if(Node -> Special . String . LinkID != -1)
  492.                         {
  493.                             ObjectNode *ListView = LTP_FindNode(Handle -> TopGroup,Node -> Special . String . LinkID);
  494.  
  495.                             if(ListView)
  496.                             {
  497.                                 NewGadget . ng_LeftEdge = ListView -> Left;
  498.                                 NewGadget . ng_TopEdge      = ListView -> Top + ListView -> Height;
  499.                                 NewGadget . ng_Width      = ListView -> Width;
  500.                             }
  501.                         }
  502.  
  503.                         /* ALWAYS */
  504.                         {
  505.                             UBYTE LocalBuffer[20];
  506.  
  507.                             sprintf(LocalBuffer,"%ld%lc%ld",Node -> Current / FIXED_UNITY,LTP_Locale ? LTP_Locale -> loc_DecimalPoint[0] : '.',Node -> Current % FIXED_UNITY);
  508.  
  509.                             if(Gadget = CreateGadget(STRING_KIND,Handle -> Previous,&NewGadget,
  510.                                 GTST_String,        LocalBuffer,
  511.                                 GTST_MaxChars,        Node -> Special . String . MaxChars > 12 ? 12 : Node -> Special . String . MaxChars,
  512.                                 GTST_EditHook,        &Handle -> FracEditHook,
  513.                                 GA_Immediate,        TRUE,
  514.                                 STRINGA_Justification,    Node -> Special . String . Justification,
  515.                                 STRINGA_ExitHelp,    Handle -> HelpHook != NULL,
  516.                             TAG_MORE,Tags))
  517.                             {
  518.                                 if(!V39)
  519.                                     Gadget -> Activation |= GACT_IMMEDIATE;
  520.                             }
  521.                         }
  522.  
  523.                         break;
  524. #endif
  525.  
  526. #ifdef DO_PASSWORD_KIND
  527.                     case PASSWORD_KIND:
  528.                     {
  529.                         WORD Len;
  530.  
  531.                         if(Len = strlen(Node -> Special . String . Original))
  532.                             memset(Node -> Special . String . Original,'·',Len);
  533.  
  534.                         if(Gadget = CreateGadget(STRING_KIND,Handle -> Previous,&NewGadget,
  535.                             GTST_String,        Node -> Special . String . Original,
  536.                             GTST_MaxChars,        Node -> Special . String . MaxChars,
  537.                             GTST_EditHook,        &Handle -> PasswordEditHook,
  538.                             GA_Immediate,        TRUE,
  539.                             STRINGA_Justification,    Node -> Special . String . Justification,
  540.                             STRINGA_ExitHelp,    Handle -> HelpHook != NULL,
  541.                         TAG_MORE,Tags))
  542.                         {
  543.                             if(!V39)
  544.                                 Gadget -> Activation |= GACT_IMMEDIATE;
  545.                         }
  546.  
  547.                         if(Len)
  548.                             strcpy(Node -> Special . String . Original,Node -> Special . String . RealString);
  549.  
  550.                         break;
  551.                     }
  552. #endif
  553.  
  554.                     case INTEGER_KIND:
  555.  
  556.                         if(Node -> Special . Integer . UseIncrementers)
  557.                         {
  558.                             NewGadget . ng_Width -= 4 + Handle -> GlyphWidth + 4;
  559.                             NewGadget . ng_Width -= 4 + Handle -> GlyphWidth + 4;
  560.  
  561.                             if(Node -> Special . Integer . IncrementerHook)
  562.                             {
  563.                                 LONG Value;
  564.  
  565.                                 Value = (LONG)CallHookPkt(Node -> Special . Integer . IncrementerHook,(APTR)Node -> Special . Integer . Number,(APTR)INCREMENTERMSG_INITIAL);
  566.  
  567.                                 if(Value < Node -> Min)
  568.                                     Value = Node -> Min;
  569.                                 else
  570.                                 {
  571.                                     if(Value > Node -> Max)
  572.                                         Value = Node -> Max;
  573.                                 }
  574.  
  575.                                 Node -> Special . Integer . Number = Value;
  576.                             }
  577.                         }
  578.  
  579. #ifndef DO_HEXHOOK
  580.                         Gadget = CreateGadget(INTEGER_KIND,Handle -> Previous,&NewGadget,
  581.                             GTIN_Number,        Node -> Special . Integer . Number,
  582.                             GTIN_MaxChars,        Node -> Special . Integer . MaxChars,
  583.                             GTIN_EditHook,        Node -> Special . Integer . EditHook ? Node -> Special . Integer . EditHook : Handle -> StandardEditHook,
  584.                             GA_Immediate,        TRUE,
  585.                             STRINGA_Justification,    Node -> Special . Integer . Justification,
  586.                             STRINGA_ExitHelp,    Handle -> HelpHook != NULL,
  587.                         TAG_MORE,Tags);
  588. #else
  589.                         if(Node -> Special . Integer . EditHook)
  590.                         {
  591.                             Gadget = CreateGadget(INTEGER_KIND,Handle -> Previous,&NewGadget,
  592.                                 GTIN_Number,        Node -> Special . Integer . Number,
  593.                                 GTIN_MaxChars,        Node -> Special . Integer . MaxChars,
  594.                                 GTIN_EditHook,        Node -> Special . Integer . EditHook,
  595.                                 GA_Immediate,        TRUE,
  596.                                 STRINGA_Justification,    Node -> Special . Integer . Justification,
  597.                                 STRINGA_ExitHelp,    Handle -> HelpHook != NULL,
  598.                             TAG_MORE,Tags);
  599.                         }
  600.                         else
  601.                         {
  602.                             UBYTE LocalBuffer[20];
  603.  
  604.                             sprintf(LocalBuffer,"%ld",Node -> Special . Integer . Number);
  605.  
  606.                             Gadget = CreateGadget(STRING_KIND,Handle -> Previous,&NewGadget,
  607.                                 GTST_String,        LocalBuffer,
  608.                                 GTST_MaxChars,        Node -> Special . Integer . MaxChars,
  609.                                 GTST_EditHook,        &Handle -> HexEditHook,
  610.                                 GA_Immediate,        TRUE,
  611.                                 STRINGA_Justification,    Node -> Special . Integer . Justification,
  612.                                 STRINGA_ExitHelp,    Handle -> HelpHook != NULL,
  613.                             TAG_MORE,Tags);
  614.                         }
  615.  
  616.                         if(Gadget)
  617.                         {
  618.                             struct StringInfo *StringInfo = (struct StringInfo *)Gadget -> SpecialInfo;
  619.  
  620.                             StringInfo -> LongInt = Node -> Special . Integer . Number;
  621.                         }
  622. #endif
  623.  
  624.                         if(Gadget)
  625.                         {
  626.                             if(!V39)
  627.                                 Gadget -> Activation |= GACT_IMMEDIATE;
  628.  
  629.                             if(Node -> Special . Integer . UseIncrementers)
  630.                             {
  631.                                 Handle -> Previous = Gadget;
  632.  
  633.                                 if(Node -> Special . Integer . LeftIncrementer = LTP_CreateIncrementer(Handle,Node,Gadget,&NewGadget,TRUE,-1))
  634.                                 {
  635.                                     Handle -> Previous = Node -> Special . Integer . LeftIncrementer;
  636.  
  637.                                     if(Node -> Special . Integer . RightIncrementer = LTP_CreateIncrementer(Handle,Node,Gadget,&NewGadget,FALSE,1))
  638.                                         Extra = Node -> Special . Integer . RightIncrementer;
  639.                                     else
  640.                                         Gadget = NULL;
  641.                                 }
  642.                                 else
  643.                                     Gadget = NULL;
  644.                             }
  645.                         }
  646.  
  647.                         break;
  648.                 }
  649.  
  650.                 if(Gadget)
  651.                 {
  652.                     Handle -> GadgetArray[Handle -> Index++] = Gadget;
  653.  
  654.                     if(Extra)
  655.                         Handle -> Previous = Extra;
  656.                     else
  657.                         Handle -> Previous = Gadget;
  658.  
  659.                     Node -> Host = Gadget;
  660.                 }
  661.                 else
  662.                 {
  663.                     Handle -> Failed = TRUE;
  664.  
  665.                     return;
  666.                 }
  667.             }
  668.         }
  669.     }
  670. }
  671.